package ReflectionLearn.RefleDeepLearn;

import ReflectionLearn.RefleDeepLearnClass.Person;
import org.junit.jupiter.api.Test;


import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

/**
 * @author Lenl
 * @version v1.0
 * @create 2021-06-07 12:36
 * @description 获取当前运行时类的树形结构
 */
public class FieldTest {

    @Test
    public void test1(){
        Class clazz= Person.class;
        //获得属性结构
        //getFields()：获取当前运行时类及其父类中声明为public访问权限的属性
        Field[] fields=clazz.getFields();
        for(Field f : fields){
            System.out.println(f);
        }
        //getDeclaredFields:获取当前运行时类中声明的所有属性(不分权限),但不包含父类的属性
        Field[] fields1=clazz.getDeclaredFields();
        for(Field f : fields1){
            System.out.println(f);
        }
    }

    //权限修饰符、数据类型、变量名
    @Test
    public void test2(){
        Class clazz= Person.class;
        Field[] fields=clazz.getDeclaredFields();
        for(Field f : fields){
            //1.权限修饰符
            int modifier= f.getModifiers();
            System.out.print(Modifier.toString(modifier)+"\t");
            //2.数据类型
            Class type=f.getType();
            System.out.print(type.getName()+"\t");
            //3.变量名
            String fName=f.getName();
            System.out.print(fName);

            System.out.println();

        }
    }
}
